#include <iostream>
using namespace std;

/*
	能被对象直接访问的属性和行为必须是public,private和protected不能被对象直接访问, 首保护成员可以在派生类中被访问，但是私有被隐藏.

	public继承：
		基类权限			派生类内部访问			派生类对象访问
		private				N						N
		protected			Y						N
		public				Y						Y

	protected继承：
		基类权限			派生类内部访问			派生类对象访问
		private				N						N
		protected			Y						N
		public				Y						N
	private继承：
		基类权限			派生类内部访问			派生类对象访问
		private				N						N
		protected			Y						N
		public				Y						N

	
*/


class Base{
private:
	int 	x;
protected:
	int 	y;
public:
	int 	z;
};

class Derived : protected Base{
public:
	void func()
	{
		//x;			//false
		//y;
		//z;			//true
	}
};

class Test : public Derived{
public:
	void func()
	{
		x;
		y;
		z;
	}
}

int main(void)
{
	Base b;
	
	Derived d;
	d.func();
	//d.x;
	//d.y;
	//d.z;
	return 0;
}
